package com.wulaoda.cinsumer;

import com.rabbitmq.client.*;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

public class Consumer_WorkQueues1 {

    public static void main(String[] args) throws IOException, TimeoutException {

        //创建工厂
        ConnectionFactory factory = new ConnectionFactory();

        //2.设置参数
        factory.setHost("152.136.33.146");//   ip默认值是localhost
        factory.setPort(5672);//端口 默认值 5672
        //虚拟机如何创建，在管理端 右侧 选择Virtual Hosts
        //创建选择 Add a new virtual host
        //输入名字就可以了
        //设置虚拟机，一个mq服务可以设置多个虚拟机，每个虚拟机就相当于一个独立的mq
        factory.setVirtualHost("/");// 虚拟机  默认值是 /
        factory.setUsername("admin");//用户名 默认值 guest
        factory.setPassword("123456");//密码 默认值 guest

        //3.创建链接 Connection
        Connection connection = factory.newConnection();

        //4.创建Channel
        //创建会话通道，生产者和mq服务所有通信都在channel通道中完成
        Channel channel = connection.createChannel();

        //接收消息
        /**
         * 参数1： 消费队列的名称
         * 参数2：消息的自动确认机制（一获得消息就通知MQ消息已被消费） true是打开
                * false关闭 （接收消息并消费后也不通知MQ 常用）
         * 参数3：消费者成功消费时的回调接口
         * 参数4：消费者取消消费的毁掉
         */
        channel.queueDeclare("work_queues",true,false,false,null);


        //接收消息
        Consumer consumer = new DefaultConsumer(channel){
            //匿名重写
//            回调方法

            /**
             *
             * @param consumerTag  标识
             * @param envelope  获取一些信息， 交换机 路由key
             * @param properties    获取配置信息
             * @param body  真是数据
             * @throws IOException
             */
            @Override
            public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
//                System.out.println("consumerTag"+consumerTag);
//                System.out.println("envelope"+envelope.getExchange());
//                System.out.println("properties"+properties);
                System.out.println("body"+ new String(body));
            }
        };
        channel.basicConsume("work_queues",true,consumer);

//        消费者不用关闭资源

    }

}
